package arraylist;

import java.util.ArrayList;
import java.util.Collections;

//扑克牌自动洗牌,发牌
class Card{
    //注:需要包含JQKA这四种

    public String rank;//牌面大小

    public String suit;//花色

    public Card(String rank,String suit){
        this.rank = rank;
        this.suit = suit;
    }
    //重写一个toString,方便后续的打印
    @Override
    public String toString(){
        return "(" + suit + rank + ")";
    }
}

public class Test11 {
    //创建一副扑克牌,用ArrayList来表示,
    private static ArrayList<Card> createDeck(){
        ArrayList<Card> deck = new ArrayList<>();
        //把四种花色,每个花色13种牌都放进去
        String[] suits = {"♥","♦","♣","♠"};
        for(String suit : suits){
            for(int i = 2;i <= 10;i++){
                Card card = new Card(" " + i,suit);
                deck.add(card);
            }
            deck.add(new Card("A",suit));
            deck.add(new Card("J",suit));
            deck.add(new Card("Q",suit));
            deck.add(new Card("K",suit));
        }
        return deck;
    }
    public static void main(String[] args) {
//        Card card = new Card("A","♦");
//        System.out.println(card);
          ArrayList<Card> deck = createDeck();
          System.out.println("洗牌前" + deck);

          //洗牌时有一个现成的方法,shuffle,就可以完成洗牌,打乱ArrayList中的顺序
          Collections.shuffle(deck);
        //与Arrays相似,相当于一个特殊的工具类,不需要创建类的对象,直接使用里面的静态方法
          System.out.println("洗牌后" + deck);

          //发牌,假设有三个玩家,每个玩家发5张牌(梭哈)
//        ArrayList<Card> player1 = new ArrayList<>();
//        ArrayList<Card> player2 = new ArrayList<>();
//        ArrayList<Card> player3 = new ArrayList<>();
        //这种写法会随着玩家数的增多,代码越来越长

        //类似于构造二维数组的方法,构造二维的ArrayList
        //ArrayList包ArrayList
        ArrayList<ArrayList<Card>> players = new ArrayList<>();
        for(int i = 0;i < 3;i++){
            //在大的ArrayList中加了三个ArrayList作为它的三个元素
            players.add(new ArrayList<>());
        }
        //发牌,取出牌堆中的第一张牌,放到第一个玩家的ArrayList中,再取第二张牌,放到第二个玩家的ArrayList中
        //就这样循环5轮.每个玩家手中就有了5张牌
        for(int round = 0;round < 5;round++){
            for(int i = 0;i < 3;i++){
                //取出牌堆中的第一张牌
                Card card = deck.remove(0);
                //放到对应玩家的ArrayList中
                ArrayList<Card> player = players.get(i);
                //取出大ArrayList中的小ArrayList,对应于每个玩家手中的牌
                player.add(card);
            }
        }

        //打印每个玩家手中的牌
        for(int i = 0;i < 3;i++){
            ArrayList<Card> player = players.get(i);
            System.out.println("玩家" + (i + 1) + "的牌" + player);
        }
    }
}
